home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 June / EnigmA AMIGA RUN 19 (1997)(G.R. Edizioni)(IT)[!][issue 1997-06][EAR-CD III].iso / recent1 / apic1805.lha / APIC / examples / HelloWorld.lst < prev    next >
File List  |  1997-05-10  |  10KB  |  254 lines

  1. #PIC V0.9.2 (c)1997 J.Petroglou    LIST FILE
  2. #file: data:aminetupp/PICSim/examples/HelloWorld.src
  3. #date: Sat May 10 15:06:38 1997
  4. #pic : PIC16C84
  5.  
  6. ADDR CODE     SRCLINE SOURCECODE
  7.  
  8. 0000             000001 
  9. 0000             000002 
  10. 0000             000003 
  11. 0000             000004 
  12. 0000             000005 ;this is a hello world program written in microchip assembler,
  13. 0000             000006 ;
  14. 0000             000007 ;the string is transmitted serial to an terminal. the baudrate is 
  15. 0000             000008 ;determined by the value of "bitcntr", loaded with "delay"
  16. 0000             000009 ;19200 at 4 MHz clock speed needs at all 52 cycles pro bit
  17. 0000             000010 ;
  18. 0000             000011 ;after sending all characters pic runs an endless loop, a reset is necessary
  19. 0000             000012 ;to send string again. this reset is performed by a watchdog time out. the
  20. 0000             000013 ;watchdogtimer is set to 2.3 seconds (128 * 18 ms)
  21. 0000             000014 ;
  22. 0000             000015 ;string lenght is defined by a zero byte at end of string
  23. 0000             000016 ;
  24. 0000             000017 ;
  25. 0000             000018 ; http://linux.rz.fh-hannover.de/~duesterb/
  26. 0000             000019 
  27. 0000             000020 
  28. 0000             000021 
  29. 0000             000022 
  30. 0000             000023         list    p=pic16c84, r=dec, s=off    ;radix = decimal
  31. 0000             000024                             ;case sensitivity=off
  32. 0000             000025 
  33. 0000             000026 back
  34. 0000             000027 
  35. 0000             000028 
  36. 0000             000029 clockspeed    =    4000000                ;clockspeed is 4 Mhz
  37. 0000             000030 baudrate    =    19200                ;enter baudrate here
  38. 0000             000031 
  39. 0000             000032 delay        =    (clockspeed/4/baudrate-12)/4    ;value for baudrate, 12 cycles fixed, 4 cycles delay
  40. 0000             000033 
  41. 0000             000034 ram        =    0ch        ;beginning of RAM register
  42. 0000             000035 
  43. 0000             000036 #define    happy
  44. 0000             000037 
  45. 0000             000038 
  46. 0000             000039     CBLOCK ram
  47. 0000             000040 
  48. 0000             000040 
  49. 0000             000041     delaycntr                ;bit dely counter
  50. 0000             000042     charcntr                ;counter shows actual character of string
  51. 0000             000043     bitcntr                    ;counter shows actual bit of byte
  52. 0000             000044     xmitdata                ;data to transmit
  53. 0000             000045 
  54. 0000             000045 
  55. 0000             000046     ENDC
  56. 0000             000047 
  57. 0000             000048 
  58. 0000             000049 
  59. 0000             000050 
  60. 0000             000051 PC        =    02h        ;programcounter
  61. 0000             000052 PortA        =    05h        ;register 05h is PortA
  62. 0000             000053     
  63. 0000             000054 
  64. 0000             000055 
  65. 0000             000056 #define        TXD    PortA,0            ;TXD line is bit 0 from Port A
  66. 0000             000057 #define        c    03h,0            ;carry bit is bit 0 from status register
  67. 0000             000058 #define        z    03h,2            ;zero bit is bit 2 from status register
  68. 0000             000059 
  69. 0000             000060 
  70. 0000             000061 
  71. 0000             000062 
  72. 0000             000063 ; Remember to change device info if programming a different PIC. Do not use RC
  73. 0000             000064 ; devices. Their clock speed is not sufficiently accurate or stable for serial
  74. 0000             000065 ; communication. 
  75. 0000             000066 
  76. 0000             000067 
  77. 0000             000068 
  78. 0000 3000        000069 begin        movlw    0        ;move 0 to tristate register, set port to output.
  79. 0001 0065        000070         tris    PortA
  80. 0002             000071 
  81. 0002 018D        000072         clrf    charcntr    ;we start at the first character
  82. 0003             000073                      
  83. 0003             000074 
  84. 0003 3008        000075 send_byte    movlw    8h        ;Eight bits in a byte. 
  85. 0004 008E        000076         movwf    bitcntr
  86. 0005             000077 
  87. 0005 2020        000078         call    string        ;Get character from string. 
  88. 0006 008F        000079         movwf    xmitdata    ;Put character into the transmit byte. 
  89. 0007             000080 
  90. 0007 088F        000081         movf    xmitdata,f    ;test xmitdata on zero
  91. 0008 1903        000082         btfsc    z
  92. 0009 2819        000083         goto    endless        ;do endless loop if xmitdata was zero
  93. 000A             000084         
  94. 000A             000085 
  95. 000A 1405        000086         bsf    TXD        ;set TXD line, dirct connection
  96. 000B             000087 
  97. 000B 0A8D        000088         incf    charcntr,f    ;next position of string. 
  98. 000C             000089 
  99. 000C 201A        000090         call    bitdelay    ;Start bit. ((delay * 4) + 4) cycles
  100. 000D             000091 
  101. 000D             000092 
  102. 000D             000093 
  103. 000D 0C8F        000094 xmit        rrf    xmitdata,f    ;Rotate right moves data bits into
  104. 000E             000095                     ;carry, starting with bit 0. 
  105. 000E             000096 
  106. 000E 1803        000097         btfsc    c        ;clear TXD if carry bit is set
  107. 000F 1005        000098         bcf    TXD        
  108. 0010 1C03        000099         btfss    c        ;set TXD if carry bit is clear
  109. 0011 1405        000100         bsf    TXD
  110. 0012             000101 
  111. 0012             000102 
  112. 0012             000103 
  113. 0012 201A        000104         call    bitdelay    ;Data bit.
  114. 0013             000105 
  115. 0013 0B8E        000106         decfsz    bitcntr,f    ;Not eight bits yet? Send next data bit
  116. 0014 280D        000107         goto    xmit
  117. 0015             000108 
  118. 0015 1005        000109         bcf    TXD        ;clear TXD
  119. 0016             000110 
  120. 0016             000111 
  121. 0016             000112 
  122. 0016 201A        000113         call    bitdelay    ;Stop bit. ((delay * 4) + 4) cycles
  123. 0017 201A        000114         call    bitdelay    ;Stop bit. ((delay * 4) + 4) cycles
  124. 0018             000115 
  125. 0018             000116 
  126. 0018 2803        000117         goto    send_byte    ;goto send_byte if line feed is not send
  127. 0019             000118 
  128. 0019             000119 
  129. 0019             000120 
  130. 0019             000121 
  131. 0019 2819        000122 endless        goto    endless        ;Endless loop. Reset controller to run
  132. 001A             000123                     ;program again.
  133. 001A             000124 
  134. 001A             000125 
  135. 001A             000126 
  136. 001A             000127 
  137. 001A             000128 
  138. 001A             000129 
  139. 001A             000130 
  140. 001A             000131 
  141. 001A             000132 
  142. 001A             000133 
  143. 001A             000134 ; To change the baud rate, substitute a new value for bitdelay at the beginning of
  144. 001A             000135 ; this program. 
  145. 001A             000136 
  146. 001A             000137 
  147. 001A             000138 
  148. 001A 300A        000139 bitdelay    movlw    delay        ;this bitdelay delays ((delay * 4) + 4) cycles
  149. 001B 008C        000140         movwf    delaycntr
  150. 001C 0000        000141 :loop        nop
  151. 001D 0B8C        000142         decfsz    delaycntr,f
  152. 001E 281C        000143         goto    :loop        ;this is an local loop
  153. 001F 3400        000144         retlw    0
  154. 0020             000145 
  155. 0020             000146 
  156. 0020             000147 
  157. 0020             000148 
  158. 0020             000149 
  159. 0020             000150 
  160. 0020             000151 
  161. 0020 080D        000152 string        movf    charcntr,w
  162. 0021 0782        000153         addwf    PC,f        ;String consisting of "Hello world"
  163. 0022             000154                     ;followed by a linefeed. 
  164. 0022             000155 
  165. 0022             000156 
  166. 0022             000157 
  167. 0022             000158 
  168. 0022             000160 
  169.  
  170.  
  171. I`m happy
  172.  
  173.  
  174. 0022             000164 
  175. 0022 3448        000165           retlw    "Hello world",0ah,0ah    ;string, two linefeeds
  176. 0023 3465        000165 
  177. 0024 346C        000165 
  178. 0025 346C        000165 
  179. 0026 346F        000165 
  180. 0027 3420        000165 
  181. 0028 3477        000165 
  182. 0029 346F        000165 
  183. 002A 3472        000165 
  184. 002B 346C        000165 
  185. 002C 3464        000165 
  186. 002D 340A        000165 
  187. 002E 340A        000165 
  188. 002F             000166 
  189. 002F             000168 
  190. 002F             000170 
  191. 002F             000172 
  192. 002F             000173 
  193. 002F 340D        000174         retlw    0dh,0        ;one cr, Zerobyte => stop sending
  194. 0030 3400        000174 
  195. 0031             000175 
  196. 0031             000176 
  197. 0031             000177 
  198. 0031             000178 
  199. 0031             000179         end
  200.  
  201.  
  202. Used Symbols
  203. -----------------------------------------
  204. back                             00000000
  205. clockspeed                       003D0900
  206. baudrate                         00004B00
  207. delay                            0000000A
  208. ram                              0000000C
  209. delaycntr                        0000000C
  210. charcntr                         0000000D
  211. bitcntr                          0000000E
  212. xmitdata                         0000000F
  213. PC                               00000002
  214. PortA                            00000005
  215. begin                            00000000
  216. send_byte                        00000003
  217. xmit                             0000000D
  218. endless                          00000019
  219. bitdelay                         0000001A
  220. string                           00000020
  221.  
  222.  
  223. Used Defines
  224. -----------------------------------------
  225. happy                            
  226. TXD                              PortA,0 
  227. c                                03h,0 
  228. z                                03h,2 
  229.  
  230.  
  231. PROGRAM MEMORY USAGE TABLE:    '-' = not used  'X' = used
  232.  
  233. 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX X---------------
  234. 0040 : ---------------- ---------------- ---------------- ----------------
  235. 0080 : ---------------- ---------------- ---------------- ----------------
  236. 00C0 : ---------------- ---------------- ---------------- ----------------
  237. 0100 : ---------------- ---------------- ---------------- ----------------
  238. 0140 : ---------------- ---------------- ---------------- ----------------
  239. 0180 : ---------------- ---------------- ---------------- ----------------
  240. 01C0 : ---------------- ---------------- ---------------- ----------------
  241. 0200 : ---------------- ---------------- ---------------- ----------------
  242. 0240 : ---------------- ---------------- ---------------- ----------------
  243. 0280 : ---------------- ---------------- ---------------- ----------------
  244. 02C0 : ---------------- ---------------- ---------------- ----------------
  245. 0300 : ---------------- ---------------- ---------------- ----------------
  246. 0340 : ---------------- ---------------- ---------------- ----------------
  247. 0380 : ---------------- ---------------- ---------------- ----------------
  248. 03C0 : ---------------- ---------------- ---------------- ----------------
  249.  
  250. Program Memory Words Used:  0049
  251. Program Memory Words Free:  0975
  252.  
  253. Errors: 0
  254.